package com.woniu.utils.utils;
import com.baidu.aip.ocr.AipOcr;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/*
 * 百度云文字识别测试类
 * */
public class BaiduyunOCRUtil {
    //设置APPID/AK/SK
    public static final String APP_ID = "76249651";//你的 App ID
    public static final String API_KEY = "kvxR0mryWbDHdo7CPkqi05gu";//你的 Api Key
    public static final String SECRET_KEY = "wbP7btUqc6UwEpcttreGG5CTFaasegUI";//你的 Secret Key

    public static void main(String []args){
        // 初始化一个AipOcr
        AipOcr aipOcr = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
        // 可选：设置网络连接参数
//            aipOcr.setConnectionTimeoutInMillis(2000);//建立连接的超时时间（单位：毫秒）
//            aipOcr.setSocketTimeoutInMillis(60000);//通过打开的连接传输数据的超时时间（单位：毫秒）

        // 可选：设置代理服务器地址, http和socket二选一，或者均不设置
//            aipOcr.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//            aipOcr.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

        // 可选：设置log4j日志输出格式，若不设置，则使用默认配置
        // 也可以直接通过jvm启动参数设置此环境变量
//            System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

        //设置本地图片地址
        String path = "https://jinaisen.oss-cn-chengdu.aliyuncs.com/db0e5681-525e-4e14-ad61-838a790260ba.png";
        //通用文字识别
        //basicGeneral(aipOcr,path);
        //身份证识别
            idCord(path);
        //车牌号识别
//            licencePlateNumber(aipOcr,path);
    }
    /*
     * 通用文字识别
     * */
    public static void basicGeneral(AipOcr aipOcr,String path){

        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("language_type", "CHN_ENG");//识别语言类型，默认为中英文混合
        options.put("detect_direction", "true");//是否检查图片朝向，默认false不检查
        options.put("detect_language", "true");//是否检查语言，默认false不检查
        options.put("probability", "true");//是否返回识别结果中每一行的置信度

        // 调用接口，返回JSON格式数据
        JSONObject jsonObject = aipOcr.basicGeneral(path, options);
        //获取JSON对象里提取图片文字信息数组
        JSONArray jsonArray = jsonObject.getJSONArray("words_result");
        //循环打印信息
        for(int i = 0;i<jsonArray.length();i++){
            System.out.println(jsonArray.getJSONObject(i).get("words"));
        }
    }

    /*
     * 身份证文字识别
     * */
    public  static Map<String,String> idCord(String path){
        AipOcr aipOcr = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("detect_direction", "true");//检查图片朝向。默认false不检测
        options.put("detect_risk", "false");//是否开启身份证类型检测功能(类型为身份证复印件、临时身份证、身份证翻拍、修改过的身份证)，默认false不开启
        String idCardSide = "front";//身份证含照片一面
//        String idCardSide = "back";//身份证含国徽一面
        //本地图片识别，返回JSON对象
        JSONObject jsonObject = aipOcr.idcard(path, idCardSide, options);
        //获取到我们需要的信息
        JSONObject result = jsonObject.getJSONObject("words_result");
        //System.out.println(result);
        HashMap<String, String> resultMap = new HashMap<>();
        //获取迭代器，
        Iterator<String> iterator = result.keys();
        while (iterator.hasNext()){
            //获取键和值
            String key = iterator.next();
            String value = result.getJSONObject(key).getString("words");
            //打印识别结果
            System.out.println(key+" : "+value);
            resultMap.put(key,value);
        }
        return resultMap;
    }

    /*
     * 车牌号识别
     * */
    public static void licencePlateNumber(AipOcr aipOcr,String path){
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();
        options.put("multi_detect", "false");//是否检测多张图片，默认false
        //本地图片识别，返回JSON对象
        JSONObject jsonObject = aipOcr.plateLicense(path, options);
        //获取需要的信息
        JSONObject result = jsonObject.getJSONObject("words_result");
        System.out.println("车牌颜色:"+result.getString("color")+"\n"+"车牌号:"+result.getString("number"));
    }
}
